// 郑州移不动 - 主要JavaScript功能

$(document).ready(function() {
    // 初始化工具提示
    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // 初始化弹出框
    var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
    var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
        return new bootstrap.Popover(popoverTriggerEl);
    });

    // 手机号码格式验证
    $('input[name="username"], input[name="number"]').on('input', function() {
        var value = $(this).val();
        var phoneRegex = /^1[3-9]\d{9}$/;
        
        if (value.length === 11) {
            if (phoneRegex.test(value)) {
                $(this).removeClass('is-invalid').addClass('is-valid');
            } else {
                $(this).removeClass('is-valid').addClass('is-invalid');
            }
        } else {
            $(this).removeClass('is-valid is-invalid');
        }
    });

    // 密码强度检查
    $('input[type="password"]').on('input', function() {
        var password = $(this).val();
        var strength = 0;
        
        if (password.length >= 8) strength++;
        if (/[a-z]/.test(password)) strength++;
        if (/[A-Z]/.test(password)) strength++;
        if (/[0-9]/.test(password)) strength++;
        if (/[^A-Za-z0-9]/.test(password)) strength++;
        
        $(this).removeClass('is-valid is-invalid');
        if (strength >= 3) {
            $(this).addClass('is-valid');
        } else if (password.length > 0) {
            $(this).addClass('is-invalid');
        }
    });

    // 确认密码验证
    $('#id_password2').on('input', function() {
        var password1 = $('#id_password1').val();
        var password2 = $(this).val();
        
        $(this).removeClass('is-valid is-invalid');
        if (password2.length > 0) {
            if (password1 === password2) {
                $(this).addClass('is-valid');
            } else {
                $(this).addClass('is-invalid');
            }
        }
    });

    // 表单提交时的加载状态
    $('form').on('submit', function() {
        var submitBtn = $(this).find('button[type="submit"]');
        var originalText = submitBtn.html();
        
        submitBtn.prop('disabled', true);
        submitBtn.html('<span class="loading"></span> 处理中...');
        
        // 如果5秒后还没有响应，恢复按钮状态
        setTimeout(function() {
            submitBtn.prop('disabled', false);
            submitBtn.html(originalText);
        }, 5000);
    });

    // 自动隐藏警告消息
    setTimeout(function() {
        $('.alert').fadeOut('slow');
    }, 5000);

    // 模拟使用功能
    $('.simulate-usage').on('click', function() {
        var phoneId = $(this).data('phone-id');
        var usageType = $(this).data('usage-type');
        var amount = parseInt($(this).data('amount') || 10);
        
        if (confirm(`确定要使用 ${amount} ${getUsageTypeName(usageType)} 吗？`)) {
            simulateUsage(phoneId, usageType, amount);
        }
    });

    // 号码切换功能
    $('.phone-switch').on('change', function() {
        var phoneId = $(this).val();
        if (phoneId) {
            window.location.href = '/switch-phone/?phone_id=' + phoneId;
        }
    });

    // 实时余额更新
    if (window.location.pathname.includes('dashboard')) {
        setInterval(updateBalance, 30000); // 每30秒更新一次
    }
});

// 模拟使用功能
function simulateUsage(phoneId, usageType, amount) {
    $.ajax({
        url: '/api/simulate-usage/',
        method: 'POST',
        data: JSON.stringify({
            phone_id: phoneId,
            usage_type: usageType,
            amount: amount
        }),
        contentType: 'application/json',
        headers: {
            'X-CSRFToken': $('[name=csrfmiddlewaretoken]').val()
        },
        success: function(response) {
            if (response.success) {
                // 更新页面上的余额显示
                updateBalanceDisplay(response);
                showAlert('success', '使用记录已更新');
            } else {
                showAlert('danger', response.message);
            }
        },
        error: function() {
            showAlert('danger', '操作失败，请重试');
        }
    });
}

// 更新余额显示
function updateBalanceDisplay(data) {
    if (data.data_remaining !== undefined) {
        $('.data-remaining').text(data.data_remaining + 'MB');
    }
    if (data.voice_remaining !== undefined) {
        $('.voice-remaining').text(data.voice_remaining + '分钟');
    }
    if (data.sms_remaining !== undefined) {
        $('.sms-remaining').text(data.sms_remaining + '条');
    }
}

// 获取使用类型名称
function getUsageTypeName(type) {
    var names = {
        'data': 'MB流量',
        'voice': '分钟语音',
        'sms': '条短信'
    };
    return names[type] || type;
}

// 显示警告消息
function showAlert(type, message) {
    var alertHtml = `
        <div class="alert alert-${type} alert-dismissible fade show" role="alert">
            ${message}
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        </div>
    `;
    
    $('.container').first().prepend(alertHtml);
    
    // 自动隐藏
    setTimeout(function() {
        $('.alert').fadeOut('slow');
    }, 3000);
}

// 更新余额（从服务器获取最新数据）
function updateBalance() {
    $.ajax({
        url: window.location.href,
        method: 'GET',
        success: function(data) {
            // 这里可以解析返回的数据并更新页面
            // 由于是完整页面刷新，这里只是示例
        }
    });
}

// 格式化数字
function formatNumber(num) {
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

// 格式化金额
function formatCurrency(amount) {
    return '¥' + parseFloat(amount).toFixed(2);
}

// 验证手机号码
function validatePhone(phone) {
    var phoneRegex = /^1[3-9]\d{9}$/;
    return phoneRegex.test(phone);
}

// 验证邮箱
function validateEmail(email) {
    var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

// 防抖函数
function debounce(func, wait) {
    let timeout;
    return function executedFunction(...args) {
        const later = () => {
            clearTimeout(timeout);
            func(...args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
}

// 节流函数
function throttle(func, limit) {
    let inThrottle;
    return function() {
        const args = arguments;
        const context = this;
        if (!inThrottle) {
            func.apply(context, args);
            inThrottle = true;
            setTimeout(() => inThrottle = false, limit);
        }
    };
}

// 复制到剪贴板
function copyToClipboard(text) {
    if (navigator.clipboard) {
        navigator.clipboard.writeText(text).then(function() {
            showAlert('success', '已复制到剪贴板');
        });
    } else {
        // 降级方案
        var textArea = document.createElement('textarea');
        textArea.value = text;
        document.body.appendChild(textArea);
        textArea.select();
        document.execCommand('copy');
        document.body.removeChild(textArea);
        showAlert('success', '已复制到剪贴板');
    }
}

// 页面加载动画
$(window).on('load', function() {
    $('.fade-in-up').addClass('fade-in-up');
});

// 平滑滚动
$('a[href^="#"]').on('click', function(event) {
    var target = $(this.getAttribute('href'));
    if (target.length) {
        event.preventDefault();
        $('html, body').stop().animate({
            scrollTop: target.offset().top - 100
        }, 1000);
    }
});
